package cn.fuxi2022.auth.service;

import java.util.HashMap;

/**
 * 微信扫码登录相关业务
 */
public interface UserLoginByWeChatOpenService {

    /**
     * 通过 code 换取 appid access_token unionid 的地址
     */
    String BASE_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token" +
            "?appid=%s" +
            "&secret=%s" +
            "&code=%s" +
            "&grant_type=authorization_code";

    /**
     * 获取用户信息的地址
     */
    String BASE_USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo" +
            "?access_token=%s" +
            "&openid=%s";

    /**
     * 通过 用户扫码成功后获得的code 请求微信服务器，换取 openid access_token unionid
     * openid：授权用户唯一标识
     * access_token：接口调用凭证
     * unionid：同一用户，对同一个微信开放平台下的不同应用，UnionID是相同的
     *
     * @param code 用户扫码登录后返回的验证码，随机唯一的值（提供该验证码获取登录的用户信息）
     * @return openid、access_token、unionid，直接get("openid")获取
     */
    HashMap<String, String> getOpenIdAndAccess(String code);

    /**
     * 根据 access_token 和 openid 获取扫码人的信息
     * 拿着得到accsess_token 和 openid，再去请求微信提供固定的地址，获取到扫描人信息
     * <p>
     * userInfo:{
     * "openid":"o3_SC55vxbyZHr5hn_TADdOHaxZw",
     * "nickname":"momo",
     * "sex":0,（不准确，可能根据每个人的微信隐私设置而不同）
     * "language":"",
     * "city":"",
     * "province":"",
     * "country":"",
     * "headimgurl":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/Q3auHgzwzM4Jy3YwELKqIqBjHwRTZ3xOFm8BJnHU7pDY994ZgzVypMOepNgn4QEfMIa09XYhoeEVrqAadcBJXQ\/132",
     * "privilege":[],
     * "unionid":"oWgGz1KxQjzAyEMydQplWk4OdUA8"
     * }
     *
     * @param openid：授权用户唯一标识
     * @param accessToken：接口调用凭证
     * @return 用户信息（集合保存，注意头像可能为空）
     */
    HashMap<String, String> getUserInfo(String openid, String accessToken);
}
